package com.example.laixunlong.control;

import androidx.activity.result.ActivityResultLauncher;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PermissionGroupInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import android.util.Log;
import android.util.Pair;
import android.util.TimeUtils;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.example.laixunlong.R;

import java.io.File;
import java.util.EventListener;

public class SystemApp_xitong extends AppCompatActivity {

    Button system_button_1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.system_app_xitong);
        system_button_1=findViewById(R.id.system_button_1);




        /*安装应用*/
        system_button_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                /*针对安卓版本8,11版本分界线进行权限获取,安卓7及下版本只要xml中配置了,就无需提权*/
                if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)//11.0版本以上,获取MANAGE_EXTERNAL_STORAGE权限,
                {
                    Log.e("版本","高于11,执行权限获取");
                    if(!Environment.isExternalStorageManager())//如果权限未开通
                    {
                        /*跳转到设置界面*/
                        Intent intent=new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        intent.setData(Uri.fromParts("package",getPackageName(),null) );//发送请求对象,也就是本软件,package是键名,不能随意更改
                        startActivity(intent);
                    }
                    else//如果权限已经开通,直接安装
                    {
                        installApp();
                    }
                }
                else//11版本以下
                {
                    Log.e("版本","低于11,执行弹窗式权限获取");
                    //安卓7以后才有动态权限管理
                    if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M)//小于11大于7
                    {
                        //准备预设值
                        int True= PackageManager.PERMISSION_GRANTED;//完全开启
                        int False= PackageManager.PERMISSION_DENIED;//未开启
                        int request_code=1;//回调编号,随意设置,仅需要和回调函数中的判断量保持一致即可
                        ActivityResultLauncher<Intent> resultLauncher=null;
                        String a= Manifest.permission.READ_EXTERNAL_STORAGE;//文件的读权限
                        String b=Manifest.permission.WRITE_EXTERNAL_STORAGE;//文件的写权限,不需要此权限,但一般成对设置
                        String[] pow=new String[]{a,b};//整合成数组,因为权限判断方法接收的对象是数组
                        int pd=True;
                        for(String p:pow)//判断一批权限是否开启的方法
                        {
                            int t= ContextCompat.checkSelfPermission(SystemApp_xitong.this,p);
                            if(t!=True)
                            {
                                Log.e("过程","存在未开启的权限");
                                pd=False;
                                break;
                            }
                        }
                        Log.e("过程",pd+"");
                        if(pd!=True)//存在未开启的权限,则请求系统弹窗
                        {
                            Log.e("过程","开始请求弹窗");
                            //申请弹窗的方法需要接收一个字符串数组
                            //权限设置情况需在下文回调方法中查看
                            ActivityCompat.requestPermissions(SystemApp_xitong.this,pow,request_code);
                        }
                        else //全部权限都已经开启,则执行安装
                        {
                            installApp();
                        }
                    }
                    else//小于7,xml权限申请后,直接安装即可
                    {
                        installApp();
                    }
                }

            }
        });
    }
    public void installApp()
    {
        String apk_path= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()+"/1.7.1.apk";
        Log.e("apk路径",apk_path);
        /*应用包管理器*/
        PackageManager pm=getPackageManager();
        PackageInfo pi=pm.getPackageArchiveInfo(apk_path,PackageManager.GET_ACTIVITIES);//通过包管理器获取安装包信息
        if(pi==null)//如果包损坏,则通知
        {
            Toast.makeText(SystemApp_xitong.this,"安装包已损坏",Toast.LENGTH_SHORT).show();
        }
        //1,获取Uri
        Uri uri=Uri.parse(apk_path);
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)//7.0版本以上,使用FileProvider,
        {
            uri= FileProvider.getUriForFile(SystemApp_xitong.this,getString(R.string.file_provider),new File(apk_path));
        }
        //2,设置数据类型为apk,并设置安装页面跳转意图
        Intent intent=new Intent(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.setDataAndType(uri,"application/vnd.android.package-archive");//设置类型
        //3,跳转
        startActivity(intent);
    }
    @Override/*用户点击权限控制窗口后的回调函数*/
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        /*数组中的参数为权限授权情况,下文进行遍历判断授权情况*/
        int pd=PackageManager.PERMISSION_GRANTED;//完全开启
        for(int i:grantResults)
        {
            if(i!=PackageManager.PERMISSION_GRANTED)
            {
                pd=-1;
            }
        }
        if(pd!=PackageManager.PERMISSION_GRANTED)//如果存在未授权的权限,则跳转到权限设置界面
        {
            Intent intent=new Intent();
            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);//使用隐式意图
            intent.setData(Uri.fromParts("package",getPackageName(),null));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
    }
}